package oop;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.util.Vector;

/**
 * Lớp hiển thị hiểu ứng tấn công
 *
 * @author TxGVNN
 */
public class Effect {

    private Entity master;
    private int damage[][] = {{-1, 60}, {-1, 50}, {-1, 40}, {-1, 30}}; // mảng lưu lượng máu mất {máu mất, vị trí vẽ}
    private Vector<Weapon> weapon;                  // Tuyển tập hiệu ứng tấn công
    private Font font;
    private int typeAttack = 0; //Loại tấn công: default = 0 (chưởng mặt trăng khuyết)
    // private Speak speak;

    public Effect(Entity master, int typeAttack) {
        this.master = master;
        //   speak = new Speak(master.x, master.y-20,"TxGVNN");
        this.typeAttack = typeAttack;
        weapon = new Vector<Weapon>();
        try {
            font = Font.createFont(Font.TRUETYPE_FONT, getClass().getResourceAsStream("/font/hlcomic.ttf"));
            font = font.deriveFont(13.0F);
        } catch (Exception ex) {
            System.out.println("Effect: " + ex.getMessage());

        }
    }

    /**
     * Lấy lượng máu mất của master mới đẩy vào mảng
     */
    public void pushDamage() {
        for (int i = 3; i > 0; i--) {
            damage[i][0] = damage[i - 1][0];
            damage[i][1] = damage[i - 1][1];
        }
        damage[0][0] = (int) master.damage;
        damage[0][1] = 60;
        master.damage = -1;
    }

    /**
     * Kiểm tra sự va chạm của đạn với địch
     *
     * @param other
     */
    public void checkCollison(Entity other) {
        for (int i = weapon.size() - 1; i >= 0; i--) {
            Weapon item = weapon.elementAt(i);
            if (item.isVisible()) {
                if (item.checkCollison(other)) {
                    other.toHit();
                }
            } else {
                weapon.removeElementAt(i);
            }
        }
    }

    /**
     * Thêm đạn
     */
    public void attack(Entity other) {
        // Hiệu ứng ra đòn
        if (typeAttack == 5 || typeAttack == 6) {
            weapon.addElement(new Weapon(master.direction, other.x, other.y - 80, typeAttack));
        } else {
            weapon.addElement(new Weapon(master.direction, master.x + 20, master.y + 45, typeAttack));
        }
    }

    /**
     * Vẽ tất cả các hiệu ứng
     *
     * @param g
     */
    public void paint(Graphics g) {
        //===Vẽ mất máu===
        g.setFont(font);
        g.setColor(Color.red);

        for (int i = 0; i < 4; i++) {
            damage[i][1] -= 7;
            if (damage[i][0] >= 0 && damage[i][1] >= -10) {

                g.drawString("-" + damage[i][0], master.x + 10, master.y + damage[i][1]);

            }
        }

        //===Vẽ lời nói===
//        speak.paint(g);
//        g.drawString(Player.getName(), master.x, master.y-20);
        //===Vẽ chưởng===
        for (int i = weapon.size() - 1; i >= 0; i--) {
            Weapon item = weapon.elementAt(i);
            if (item.limit > 0) {
                item.paint(g);
            } else {
                weapon.removeElementAt(i);
            }
        }
    }

//    class Speak {
//
//        private Image images[];
//        private int x, y;
//        private String text;
//        private int begin = 0;
//        private int loop=0;
//
//        Speak(int x, int y, String text) {
//            this.x = x;
//            this.y = y;
//            this.text = text;
//            try {
//                images = new Image[75];
//                int b = -9;
//                for (int i = 0; i < 75; i += 1) {
//                    b += 9;
//                    images[i] = ImageIO.read(this.getClass().getResourceAsStream("/font.png")).getSubimage(0, b, 6, 9);
////                    b += 9;
////                    images[i + 1] = ImageIO.read(this.getClass().getResourceAsStream("/font.png")).getSubimage(0, b, 6, 9);
//                }
//            } catch (Exception e) {
//                System.err.print("Speak: " + e.getMessage());
//            }
//        }
//
//        public void paint(Graphics g) {
//            loop = (loop+1) % 100;
//            if (loop == 49) {
//                              System.out.println("Ve");
//                if (++begin < text.length()) {
//                    for (int i = 0; i < begin; i++) {
//                      
//                        g.drawImage(images[i], x + i * 7, y, null);
//                    }
//                }
//            }
//
//        }
//
//    }
}
